/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Maestros.Controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.jdom.*;
import org.jdom.input.*;
import pe.edu.pucp.Maestros.DAO.VueloCargaDAO;
import pe.edu.pucp.Maestros.Vista.CargaXMLGUI;
import pe.edu.pucp.Modelo.Aeropuerto;
import pe.edu.pucp.Modelo.Avion;
import pe.edu.pucp.Modelo.EstadoVuelo;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Modelo.Vuelo;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Util.LogHelper;
/**
 *
 * @author oscar
 */
public class VueloControlador {
    private Vuelo vuelo;
    private VueloCargaDAO m;    
    private CargaXMLGUI view;
    private Usuario usr;
    public ArrayList<Vuelo> listaVuelo;
    
    public VueloControlador(VueloCargaDAO dao, CargaXMLGUI v) {
        this.m = dao;
        this.view = v;  
        
        view.addCargarVueloListener(new CargarButtonListener());
        view.addBuscarVueloListener(new AbrirFile());
    }
        
    public VueloControlador(VueloCargaDAO dao, CargaXMLGUI v, Usuario user) {
        this.m = dao;
        this.view = v;    
        this.usr = user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos())); 
        view.addCargarVueloListener(new CargarButtonListener());
        view.addBuscarVueloListener(new AbrirFile());
    }
    
    public VueloControlador(VueloCargaDAO dao, CargaXMLGUI v, Vuelo vuelo) {
        this.vuelo = vuelo;
        this.m = dao;
        this.view = v;   
    }  
    
    public int ArchivoCorrecto(String direccion){
        File dir = new File(direccion);
        if (direccion.equals("")){
            return 0;
        }
        
        if (dir.exists()){        
            String[] ficheros = dir.list();            
            int b = 0;
            for (int a=0;a<ficheros.length;a++){
                if (ficheros[a].equals("VUELO.xml")){
                    b++;
                    break;
                }                
            }
            return b;     
        }
        else{
            return 0;
        }
    }
    
    public Date convertStringToTimeStamp(String dateToConvert) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss");
        Date ldateFrom1 = (Date) sdf.parse(dateToConvert);
        return ldateFrom1;        
    }
    
    class AbrirFile implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de xml","xml");
            JFileChooser filechooser = new JFileChooser();
            filechooser.setFileFilter(filter);
            filechooser.setDialogTitle("Abrir archivo en");

            int result = filechooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION){
                int EsCorrecto=ArchivoCorrecto(filechooser.getCurrentDirectory().getPath());    
                if (EsCorrecto == 1){
                    File file = filechooser.getSelectedFile();
                    String a = filechooser.getCurrentDirectory().getPath()+"/VUELO.xml";
                    if(a.equals(String.valueOf(file))){
                    view.setNombreArchivoVuelo(String.valueOf(file));
                    }
                    else{
                        view.mostrarError("No es el archivo correcto");
                        view.setNombreArchivoVuelo("");
                    }
                }
                else{
                    view.mostrarError("No es el archivo correcto");
                    view.setNombreArchivoVuelo("");
                }

            }  
        }     
    }
    
    class CargarButtonListener implements ActionListener {
        @Override        
        public void actionPerformed(ActionEvent e) {
            if(view.getNombreArchivoVuelo().equals("")){
                view.setNombreArchivoDatosIniciales("");
                view.mostrarError("Escoja un archivo para cargar los datos");
            }
            else{
                try {                     
                    SAXBuilder builder = new SAXBuilder(false); 
                    vuelo = new Vuelo();
                    Document doc = builder.build(view.getNombreArchivoVuelo());
                    Element raiz10 = doc.getRootElement(); 
                    List equipos = raiz10.getChildren("Vuelo"); 
                    Iterator i = equipos.iterator(); 
                    while (i.hasNext()) { 
                        Element e10 = (Element) i.next();    
                        int a1 = Integer.parseInt(e10.getChild("idvuelo").getValue());   
                        int a2 = Integer.parseInt(e10.getChild("idorigen").getValue());
                        int a3 = Integer.parseInt(e10.getChild("iddestino").getValue());
                        int a4 = Integer.parseInt(e10.getChild("idavion").getValue());
                        int a5 = Integer.parseInt(e10.getChild("idestado").getValue());
                        String b1 = e10.getChild("salida").getValue();
                        String x1 = e10.getChild("salidaest").getValue();
                        String b2 = e10.getChild("llegada").getValue();
                        String x2 = e10.getChild("llegadaest").getValue();
                        Date a8 = convertStringToTimeStamp(x1); 
                        Date a9 = convertStringToTimeStamp(x2);                     
                        Double a10 = Double.parseDouble(e10.getChild("recorrido").getValue());
                        int a11 = Integer.parseInt(e10.getChild("numPack").getValue());
                        String a12 = e10.getChild("retraso").getValue();
                        Double a13 = Double.parseDouble(e10.getChild("costo").getValue());

                        Aeropuerto c= new Aeropuerto();
                        c.setIdaeropuerto(a2);

                        Aeropuerto d = new Aeropuerto();
                        d.setIdaeropuerto(a3);

                        Avion e1 = new Avion();
                        e1.setIdavion(a4);

                        EstadoVuelo f = new EstadoVuelo();
                        f.setIdestado(a5);

                        vuelo.setIdvuelo(a1);
                        vuelo.setAeropuertoByIdorigen(c);
                        vuelo.setAeropuertoByIddestino(d);
                        vuelo.setAvion(e1);
                        vuelo.setEstadoVuelo(f);
                        vuelo.setSalida(a8);
                        vuelo.setLlegada(a9);                 
                        vuelo.setLlegadaest(a9);
                        vuelo.setSalidaest(a8);
                        vuelo.setRecorrido(a10);
                        vuelo.setNumpack(a11);
                        vuelo.setRetraso(a12);
                        vuelo.setCosto(a13);                    
                        m.guardarVuelo(vuelo);
                    } 
                    LogHelper.registrarOperacion(usr, Constante.ACCION_CARGAR, Constante.OBJETO_VUELO, "Se cargaron "+equipos.size()+" registros de vuelo");
                    view.mostrarConformidad("Datos de vuelos cargados");
                    view.setNombreArchivoVuelo("");
                }  
                catch (JDOMException | IOException | NumberFormatException | ParseException e10) { }
                
                view.getbtnAbrirDInicial().setEnabled(false);
                view.getbtnCargarDInicial().setEnabled(false);
                view.getbtnAbrirDVuelo().setEnabled(false);
                view.getbtnCargarDVuelo().setEnabled(false);
                view.getbtnAbrirDSimulacion().setEnabled(true);
                view.getbtnCargarDSimulacion().setEnabled(true);       
            }
        }
    }
         
} 
       
  
